package com.isoftstone.app.controller.feeUser;

import com.isoftstone.bank.controller.base.BaseController;
import com.isoftstone.common.Tidings;
import com.isoftstone.merchant.entity.bind.MBind;
import com.isoftstone.merchant.entity.feeUser.MFeeUser;
import com.isoftstone.merchant.entity.mdept.MDept;
import com.isoftstone.merchant.service.bind.impl.BindServiceImpl;
import com.isoftstone.merchant.service.feeUser.impl.FeeUserServiceImpl;
import com.isoftstone.merchant.service.mdept.impl.MdeptService;
import com.isoftstone.util.Const;
import com.isoftstone.util.PageData;
import com.isoftstone.util.UuidUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Collections;
import java.util.Date;
import java.util.List;

/**
 * @Author: zhaojg
 * @Description
 * @Date: Created in 18:51 2017/12/10
 * @Modified by:
 * <p>
 * 移动端添加缴费用户接口
 */
@Controller
public class AppFeeUserController extends BaseController {

    @Autowired
    FeeUserServiceImpl feeUserService;

    @Autowired
    MdeptService mdeptService;

    @Autowired
    BindServiceImpl bindServiced;

    /**
     * @param corpId      缴费单位id
     * @param feeId       缴费编号
     * @param feeUserName 缴费姓名
     * @param openAccount 中银易商登录用户
     * @return error      插入失败
     */
    @RequestMapping(value = "app/admin/queryFeeId", method = RequestMethod.POST)
    @ResponseBody
    public Object addSignFeeUser(String corpId, String feeId, String feeUserName, String openAccount) {
        PageData pd = this.getPageData();
        Tidings<Object> tidings = new Tidings<Object>();
        try {
            //用页面传的缴费单位corpId和缴费编号feeId和feeUserName查询
            MFeeUser feeUser = feeUserService.getFeeUserByCorpIdAndFeeId(feeId, corpId);
            if (feeUser != null && StringUtils.equals(feeUser.getFeeId(), feeId)) {
                if (StringUtils.equals(feeUserName, feeUser.getFeeUserName()) && StringUtils.equals(feeUser.getStatus(), Const.SHENGXIAO)) {
                    //根据feeUserId去m_bind表中查询
                    MBind mBind = bindServiced.queryBindByThreeParam(feeUser.getFeeUserId(), feeUser.getCorpId(), openAccount);
                    if (mBind != null && StringUtils.equals(mBind.getStatus(), Const.MBSHENGXIAO)) {
                        tidings.setStatus(Const.YQY);
                        tidings.setMsg("对不起，您已经做过签约了！");
                    }
                    //续约
                    if (mBind != null && StringUtils.equals(mBind.getStatus(), Const.MBJIEYUE)) {
                        //返回缴费用户详情信息
                        MFeeUser feeUser2 = feeUserService.queryFeeUserByCorpIdAndFeeId(feeId, corpId);
                        //获取该缴费用户的deptId
                        String deptId = feeUser2.getDeptId();
                        //调用向上查询机构方法
                        List<MDept> superList = mdeptService.getUpAlltree(deptId);
                        Collections.reverse(superList);
                        feeUser2.setmDept(superList);
                        feeUser2.setStatus(Const.SHIXOAO);
                        tidings.setStatus(Const.YSX);
                        tidings.setMsg("该缴费编号已经失效，请续约！");
                        tidings.setT(feeUser2);
                    }
                    //申请绑定
                    if (mBind == null) {
                        //返回缴费用户详情信息
                        MFeeUser feeUser2 = feeUserService.queryFeeUserByCorpIdAndFeeId(feeId, corpId);
                        //获取该缴费用户的deptId
                        String deptId = feeUser2.getDeptId();
                        //调用向上查询机构方法
                        List<MDept> superList = mdeptService.getUpAlltree(deptId);
                        Collections.reverse(superList);
                        feeUser2.setmDept(superList);
                        tidings.setStatus(Const.QRSQ);
                        tidings.setMsg("确认申请！");
                        tidings.setT(feeUser2);
                    }
                }
                if (StringUtils.equals(feeUserName, feeUser.getFeeUserName()) && StringUtils.equals(feeUser.getStatus(), Const.DAISHENHE)) {
                    //返回缴费用户详情信息
                    MFeeUser feeUser2 = feeUserService.queryFeeUserByCorpIdAndFeeId(feeId, corpId);
                    //获取该缴费用户的deptId
                    String deptId = feeUser2.getDeptId();
                    //调用向上查询机构方法
                    List<MDept> superList = mdeptService.getUpAlltree(deptId);
                    Collections.reverse(superList);
                    feeUser2.setmDept(superList);
                    tidings.setStatus(Const.DSH);
                    tidings.setMsg("等待后台复核！");
                    tidings.setT(feeUser2);
                }
                if (!StringUtils.equals(feeUserName, feeUser.getFeeUserName())) {
                    tidings.setStatus(Const.BPP);
                    tidings.setMsg("缴费用户号与名称不匹配！");
                }
            } else {
                tidings.setStatus(Const.BCZ);
                tidings.setMsg("缴费编号不存在！");
            }
        } catch (Exception e) {
            tidings.setMsg("失败");
            tidings.setStatus(Const.ERROR);
            e.printStackTrace();
        }
        return tidings;
    }

    /**
     * 缴费用户申请
     *
     * @param feeUser 缴费用户
     *                feeUser中封装的参数 feeUser[
     *                corpId ：缴费单位id
     *                feeId : 缴费编号
     *                feeUserName ： 缴费用户姓名
     *                deptId : 机构id
     *                telNo : 联系方式
     *                openAccount : 中银易商账号]
     * @return
     */
    @RequestMapping(value = "app/admin/feeUserApply", method = RequestMethod.POST)
    @ResponseBody
    public Tidings<Object> addFeeUser(MFeeUser feeUser) {
        Tidings<Object> tidings = new Tidings<Object>();
        try {
            feeUserService.addFeeUser(feeUser);
            //给m_bind表插入一条数据
            MBind mBind = new MBind();
            mBind.setSeqId(Long.parseLong(UuidUtil.getNumFormatUUID()));
            mBind.setOpenAccount(feeUser.getOpenAccount());
            mBind.setCorpId(feeUser.getCorpId());
            mBind.setFeeUserId(feeUser.getFeeUserId());
            mBind.setwUserId("");
            mBind.setStatus("1");
            mBind.setCreateDate(new Date());
            mBind.setCreator(feeUser.getFeeUserId());
            bindServiced.addBind(mBind);
            tidings.setMsg("保存成功");
            tidings.setStatus(Const.SUCCESS);
        } catch (Exception e) {
            tidings.setMsg("保存失败");
            tidings.setStatus(Const.ERROR);
        }
        return tidings;
    }

    /**
     * 解约
     *
     * @param corpId      缴费单位id
     * @param feeId       缴费编号
     * @param openAccount 中银易商账号
     * @return
     */
    @RequestMapping(value = "app/admin/cancelContract", method = RequestMethod.POST)
    @ResponseBody
    public Tidings<Object> cancelContractByFeeId(String feeId, String corpId, String openAccount) {
        Tidings<Object> tidings = new Tidings<Object>();
        //根据缴费单位id和缴费编号查询后，做status的更新操作
        //1签约 0失效 2待审核
        try {
//            feeUserService.cancelContract(feeId, corpId, status);
            MFeeUser feeUser = feeUserService.getfeeUserByFeeId(feeId, corpId);
            //根据feeId更新m_bind表的状态
            bindServiced.cancelContract(feeUser.getFeeUserId(), feeUser.getCorpId(), openAccount);
            tidings.setMsg("更新成功");
            tidings.setStatus(Const.SUCCESS);
        } catch (Exception e) {
            tidings.setMsg("更新失败");
            tidings.setStatus(Const.ERROR);
            e.printStackTrace();
        }
        return tidings;
    }

    /**
     * 续约
     *
     * @param feeId       缴费编号
     * @param corpId      缴费单位id
     * @param openAccount 中银易商账号
     * @return
     */
    @RequestMapping(value = "app/admin/extentContract", method = RequestMethod.POST)
    @ResponseBody
    public Tidings<Object> extentContract(String feeId, String corpId, String openAccount) {
        Tidings<Object> tidings = new Tidings<Object>();
        try {
            MFeeUser feeUser = feeUserService.getfeeUserByFeeId(feeId, corpId);
            //根据feeUserId和openAccount和corpId和status = '0'联合区m_bind表中查询
            MBind mBind = bindServiced.queryMbindByThreeParam(feeUser.getFeeUserId(), openAccount, corpId);
            //如果可以查到记录，可以续约
            if (mBind != null) {
//                feeUserService.extentContract(feeId, corpId, status);
                //根据feeId更新m_bind表的状态
                bindServiced.extentContract(feeUser.getFeeUserId(), feeUser.getCorpId(), openAccount);
                tidings.setMsg("更新成功");
                tidings.setStatus(Const.SUCCESS);
            } else {
                //如果没有查到记录，就不能续约，提示不能续约
                tidings.setMsg("不能续约");
                tidings.setStatus(Const.BNXY);
            }
        } catch (Exception e) {
            tidings.setMsg("更新失败");
            tidings.setStatus(Const.ERROR);
            e.printStackTrace();
        }
        return tidings;
    }

    /**
     * 申请绑定
     *
     * @param openAccount 中银易商用户号
     * @param feeUserId   缴费人员id
     * @return
     */
    @RequestMapping(value = "app/admin/bindApply", method = RequestMethod.POST)
    @ResponseBody
    public Tidings<Object> affirmApply(String openAccount, String feeUserId, String corpId) {
        Tidings<Object> tidings = new Tidings<Object>();
        try {
            //给m_bind表插入一条数据
            MBind mBind = new MBind();
            mBind.setSeqId(Long.parseLong(UuidUtil.getNumFormatUUID()));
            mBind.setOpenAccount(openAccount);
            mBind.setCorpId(corpId);
            mBind.setFeeUserId(feeUserId);
            mBind.setwUserId("");
            mBind.setStatus("1");
            mBind.setCreateDate(new Date());
            mBind.setCreator("");
            bindServiced.addBind(mBind);
            tidings.setMsg("保存成功");
            tidings.setStatus(Const.SUCCESS);
        } catch (Exception e) {
            e.printStackTrace();
            tidings.setMsg("保存失败");
            tidings.setStatus(Const.ERROR);
        }
        return tidings;
    }

    /**
     * 查询feeUser的公共方法
     *
     * @param feeId  缴费编号
     * @param corpId 缴费单位id
     * @param openAccount 中银易商账号
     * @param feeUserId 缴费用户id
     * @return
     */
//    @RequestMapping(value = "app/admin/queryFeeUserAndDept", method = RequestMethod.POST)
//    @ResponseBody
//    public Tidings<Object> commonQueryFeeUser(String feeId, String corpId, String openAccount,String feeUserId) {
//
//        Tidings<Object> tidings = new Tidings<Object>();
//        //返回缴费用户详情信息
//        MFeeUser feeUser2 = null;
//        try {
//            feeUser2 = feeUserService.queryFeeUserByCorpIdAndFeeId(feeId, corpId);
//            //获取该缴费用户的deptId
//            String deptId = feeUser2.getDeptId();
//            //调用向上查询机构方法
//            List<MDept> superList = mdeptService.getUpAlltree(deptId);
//            Collections.reverse(superList);
//            feeUser2.setmDept(superList);
//            if (StringUtils.equals(feeUser2.getMbStatus(), "1")) {
//                feeUser2.setStatus("1");
//            }
//            if (StringUtils.equals(feeUser2.getMbStatus(), "0")) {
//                feeUser2.setStatus("0");
//            }
//            if (StringUtils.equals(feeUser2.getStatus(), "2")) {
//                feeUser2.setStatus("2");
//            }
//            tidings.setMsg("查询成功");
//            tidings.setStatus(Const.SUCCESS);
//            tidings.setT(feeUser2);
//        } catch (Exception e) {
//            e.printStackTrace();
//            tidings.setMsg("查询失败");
//            tidings.setStatus(Const.ERROR);
//        }
//        return tidings;
//
//    }

}
